Итак, чтобы писать линейные программы, вводящие данные, проводящие вычисления и выводящие результат, не хватает пустяка. А именно вычислений ;).

Операторы и приоритет

Язык С поддерживает обычные математические операторы: +, -, *, /. Вычисления выполняются по обычным математическим правилам, с учетом приоритета (то есть умножение и деление выполняются в первую очередь).
Присваиванием мы уже пользовались, так что
  • y=3+2*2
выглядит вполне понятно.
Если естественный порядок вас не устраивает, всегда можно добавить скобки:
  • y=(3+2)*2.
Кроме четырех математических операций, в программах часто встречается оператор %. В языке С это оператор взятия остатка от деления.
  • 5%2=>1, 6%2=>0, 75%10=>5
Он определен только для целых и имеет приоритет как у умножения и деления.

Сокращенная запись операторов

В языке С есть несколько уменьшающих писанину сокращений.
Во-первых, это операции инкремента и декремента (увеличение и уменьшение на 1).
  • x++ означает x=x+1,
  • x-- означает x=x-1.
Работает только для целых чисел.
(На самом деле можно записать x++, а можно ++x. В том и в том случае x увеличится. Разница проявится, только если мы собираемся использовать значение оператора в выражении.)

Во-вторых, это комбинированные операторы. Так, вместо
  • x=x+2 можно записать x+=2
Этот фокус работает со всеми операторами (и не только на целых числах).

Преобразование типов при вычислениях

В предыдущей части мы столкнулись со случаем
  • 45/30 => 1.
В общем случае, если один из элементов выражения вещественный, то и результат будет иметь вещественный тип. В противном случае, результат будет целый (как и вышло у нас).
  • double x;
  • x=1/3;
результат деления нацело – ноль, он и запишется в переменную x.
Если мы хотим получить одну третью, нужно чтобы хотя бы одна часть выражения была вещественной:
  • x=1/3.0;
Если же тип переменной, куда записывается вещественный результат, целый, то дробная часть отбрасывается. Так, для
  • int x;
  • x=1/3.0;
в результате вычисления получается вещественное число, но оно усекается до целого при присваивании. В результате – ноль.
Если результат слишком велик для представления целым числом, возникнет ошибка - переполнение.

Часто возникающие вопросы

Осталось получить ответ на несколько вопросов.
  1. Как возвести число в степень?
  2. Как записать операцию взятия квадратного корня?
  3. Где взять синус и прочие элементарные функции?

Для выполнения всех этих действий требуется библиотека math.h.
Для использования ее нужно подключить (#include <math.h>), а дальше:
1) Для возведения в степень служит функция pow

  • будет pow(2.0,3.0)
(все математические функции принимают вещественные аргументы и выдают вещественный результат).
2) Квадратный корень - функция sqrt
  • sqrt(4.0)=>2.0
3) Синус и прочие функции нужно искать там же: sin, cos, tan (это тангенс), exp, log (это натуральный логарифм)...
Нужно иметь в виду, что тригонометрические функции принимают угол не в градусах, а в радианах. Полная окружность - 360 градусов, или 2Пи радиан. Число Пи определено там же как M_PI, правда, чтобы его можно было использовать, нужно перед
  • #include <math.h>
добавить
  • #define _USE_MATH_DEFINES
Тогда, для вычисления синуса 15 градусов надо будет записать
  • y=sin(15.0*M_PI/180).

Часто спрашиваемые вопросы

В заключение - парочка часто встречающихся (на экзамене) вопросов.
1) Как посчитать

  • pow(sin(x),2.0)
2) Как получить корень 3й (7й, любой другой) степени?
  • pow(x,1/3.0)